package com.arpa.oms.service;

import com.arpa.oms.domain.dto.OmsPayableDetailDTO;
import com.arpa.oms.domain.entity.OmsPayableDetail;
import com.arpa.oms.domain.vo.OmsPayableDetailVO;
import com.arpa.wms.domain.dto.ExpenseDetailSettlementDTO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.math.BigDecimal;
import java.util.List;
import java.util.concurrent.Future;

/**
 * <p>
 * OMS应付明细 服务类
 * </p>
 *
 * @author LEO
 * @since 2020-12-04
 */
public interface IOmsPayableDetailService extends IService<OmsPayableDetail> {

    /**
     * 保存
     * @param entity
     * @return
     */
    @Override
    boolean save(OmsPayableDetail entity);

    /**
     * 根据code更新实体
     * @param entity
     * @return
     */
    int updateByCode(OmsPayableDetail entity);

    /**
     * 查询列表
     * @param omsPayableDetailDTO
     * @return
     */
    List<OmsPayableDetailVO> queryList(OmsPayableDetailDTO omsPayableDetailDTO);

    /**
     * 查询合计,包含总数
     * @param omsPayableDetailDTO
     * @return
     */
    OmsPayableDetailVO queryListSum(OmsPayableDetailDTO omsPayableDetailDTO);

    /**
     * 检查费用是否可以结算
     * @param item
     * @return
     */
    Future check(ExpenseDetailSettlementDTO.SettlementItem item);

    /**
     * 生成结算单时更新费用金额
     * @param code 费用明细标识
     * @param thisSettledMoney  本次结算金额
     * @param byCode 操作人code
     * @param name 操作人姓名
     */
    void updateSettlementMoney(String code, BigDecimal thisSettledMoney, String byCode, String name);
    /**
     * 删除、修改结算单后还原收费信息
     * @param code 费用标识
     * @param restoreSettledMoney 要还原的金额
     */
    void restoreSettlementStatus(String code, BigDecimal restoreSettledMoney,BigDecimal reduceMoney);

    /**
     * 付款单审核通过后确认收费信息
     * @param code 费用标识
     * @param confirmMoney 确认金额
     */
    void confirmSettlementStatus(String code, BigDecimal confirmMoney);
}
